/*
* 
* Fichier source projet intel Acceler8 sous license GNU GPL v3.
* Voir http://www.gnu.org/copyleft/gpl.html pour plus d'informations
* La license est egalement disponible dans le repertoire /doc
* 
* Cree le : lundi 31 octobre 2011 à 17 : 11.
* Auteurs : Axel MOINET et Arnaud DURAND.
* 
* Nom de fichier : lecturefichier.cpp
* Chemin du fichier : src/classes/lecturefichier/lecturefichier.cpp
* 
* Description : Declaration de la classe utilisee pour la lecture de fichier.
* 	Implemente les fonctions de lecture de ligne et d'appel au calcul de Cgh.
* 	Implemente le pipeline de lecture du fichier.
* 
*/

#include "lecturefichier.h"
#include "../readLine/readLine.h"
#include "../convertLineToInt/convertLineToInt.h"
#include "../addToPtab/addToPtab.h"
#include <iostream>

using namespace std;

lectureFichier::lectureFichier() {
	fichierEntree = NULL;
	Ptab = NULL;

	//Lancer une exception : pas de parametres donnes au constructeur de la classe
}

lectureFichier::lectureFichier(FILE *p_fichier, tableauSommePrefixes *p_Ptab) {
	// !! Fixer le nombre de jetons à un paramètre fixe
	nbJetons = 6;

	if(p_fichier != NULL)
		this->fichierEntree = p_fichier;
	else {
		this->fichierEntree = NULL;
		cout << "Pointeur de fichier nul. Erreur lors de l'instanciation de la classe" << endl;
	}

	if(p_Ptab != NULL)
		this->Ptab = p_Ptab;
	else {
		this->Ptab = NULL;
		cout << "Pointeur de tableau nul. Erreur lors de l'instanciation de la classe" << endl;
	}
}

lectureFichier::lectureFichier(int p_nbJetons, FILE *p_fichier, tableauSommePrefixes *p_Ptab) {
	//Assimilation des parametres passes à la fonction
	nbJetons = p_nbJetons;

	if(p_fichier != NULL)
		this->fichierEntree = p_fichier;
	else {
		this->fichierEntree = NULL;
		cout << "Pointeur de fichier nul. Erreur lors de l'instanciation de la classe" << endl;
	}

	if(p_Ptab != NULL)
		this->Ptab = p_Ptab;
	else {
		this->Ptab = NULL;
		cout << "Pointeur de tableau nul. Erreur lors de l'instanciation de la classe" << endl;
	}
}

lectureFichier::~lectureFichier() {

}

int lectureFichier::requestForCgh() {
	//Return mis juste pour éviter une erreur de compilation !!
	return 0;
}

/*
 * Création de la chaine de filtre pour le pipeline de lecture du fichier
 */
void lectureFichier::makePipeline() {

	cout << "Creation du pipeline de lecture du fichier..." << endl;

	readLine filtreLectureLigne(fichierEntree);
	this->pipeline.add_filter(filtreLectureLigne);

	convertLineToInt filtreConversion;
	this->pipeline.add_filter(filtreConversion);

	//A modifier quand l'implementation sera terminee
	addToPtab filtreAjout;
	this->pipeline.add_filter(filtreAjout);
}

/*
 * Lancement du pipeline de lecture de fichier
 */
void lectureFichier::runReadFilePipeline() {

	cout << "Lancement du pipeline de lecture du fichier" << endl;

	this->pipeline.run(nbJetons);

}
